﻿/*Code van de trigger*/
/*This trigger isn't optimized!*/
CREATE TRIGGER [dbo].[yelp_ins]
ON [dbo].[Yelps]
FOR INSERT, UPDATE
AS
DECLARE @message nvarchar(141),
		@tag nvarchar(140),
		@pos smallint,
		@start smallint,
		@stop smallint,
		@count smallint,		
		@tagid bigint,
		@yelpid bigint
SELECT @message = i.[Message] FROM inserted i
SELECT @yelpid = i.[YelpId] FROM inserted i

SET @pos = 1
WHILE @pos <= LEN(@message)
BEGIN
	SET @start = CHARINDEX(N'λ', @message, @pos) /*zoek eerst volgend voorkomen van λ*/
	IF @start > 0 /*we hebben een λ gevonden*/
	BEGIN
		/*zoek einde van de tag*/
		SET @stop = CHARINDEX(N' ', @message, @start) /*zoek eerst volgend voorkomen van een spatie*/
		IF @stop = 0
			SET @stop = LEN(@message) /*we hebben geen spatie meer gevonden, dus de tag loopt door tot einde van het bericht*/
		SET @tag = SUBSTRING(@message, @start+1, @stop - @start) /*knip de tag uit*/				
		
		SELECT @count = count(*) FROM dbo.[LambdaTags] WHERE Tag = @tag
		IF @count = 0
			INSERT INTO dbo.[LambdaTags] (Tag) VALUES (@tag); /*doe een insert als de tag nog niet bestaat*/		
		SELECT @tagid = LambdaTagId FROM dbo.[LambdaTags] WHERE Tag = @tag /*haal tagid op*/
		
		INSERT INTO dbo.[LambdaTagsYelps] (LambdaTagId, YelpId) VALUES (@tagid, @yelpid);		
		SET @pos = @stop + 1		
	END
	ELSE
		BREAK /*spring uit lus, er zitten geen tags (meer) in de message*/
END


SET @pos = 1
WHILE @pos <= LEN(@message)
BEGIN
	SET @start = CHARINDEX(N'@', @message, @pos) /*zoek eerst volgend voorkomen van @*/
	IF @start > 0 /*we hebben een @ gevonden*/
	BEGIN
		/*zoek einde van de tag*/
		SET @stop = CHARINDEX(N' ', @message, @start) /*zoek eerst volgend voorkomen van een spatie*/
		IF @stop = 0
			SET @stop = LEN(@message) /*we hebben geen spatie meer gevonden, dus de tag loopt door tot einde van het bericht*/
		SET @tag = SUBSTRING(@message, @start+1, @stop - @start) /*knip de mention uit*/				
		
		SELECT @count = count(*) FROM dbo.[Mentions] WHERE [Mention] = @tag
		IF @count = 0
			INSERT INTO dbo.[Mentions] (Mention) VALUES (@tag); /*doe een insert als de mention nog niet bestaat*/		
		SELECT @tagid = MentionId FROM dbo.[Mentions] WHERE Mention = @tag /*haal mentionid op*/
		
		INSERT INTO dbo.[MentionsYelps] (MentionId, YelpId) VALUES (@tagid, @yelpid);		
		SET @pos = @stop + 1		
	END
	ELSE
		BREAK /*spring uit lus, er zitten geen mentions (meer) in de message*/
END
GO